Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


meshchatx/src/frontend/components/messages/MessagesPage.vue v3.2.0 (c5deab07) Text, 12.15 KB

Tb4b4b4<Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-1 min-w-0 h-full overflow-hidden"Tb4b4b4>
Tb4b4b4<Tff7b72MessagesSidebar
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3isPopoutModeTa5d6ff"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{ Ta5d6ff'hidden sm:flex'Tff7b72: Te6edf3destinationHash Tb4b4b4}Ta5d6ff"
Tb4b4b4:Te6edf3conversationsTff7b72=Ta5d6ff"Te6edf3conversationsTa5d6ff"
Tb4b4b4:Te6edf3peersTff7b72=Ta5d6ff"Te6edf3peersTa5d6ff"
Tb4b4b4:Te6edf3selected-destination-hashTff7b72=Ta5d6ff"Te6edf3selectedPeerTff7b72?Tb4b4b4.Te6edf3destination_hashTa5d6ff"
Tb4b4b4:Te6edf3conversation-search-termTff7b72=Ta5d6ff"Te6edf3conversationSearchTermTa5d6ff"
Tb4b4b4:Te6edf3filter-unread-onlyTff7b72=Ta5d6ff"Te6edf3filterUnreadOnlyTa5d6ff"
Tb4b4b4:Te6edf3filter-failed-onlyTff7b72=Ta5d6ff"Te6edf3filterFailedOnlyTa5d6ff"
Tb4b4b4:Te6edf3filter-has-attachments-onlyTff7b72=Ta5d6ff"Te6edf3filterHasAttachmentsOnlyTa5d6ff"
Tb4b4b4:Te6edf3is-loadingTff7b72=Ta5d6ff"Te6edf3isLoadingConversationsTa5d6ff"
Tb4b4b4@Te6edf3conversation-clickTff7b72=Ta5d6ff"Te6edf3onConversationClickTa5d6ff"
Tb4b4b4@Te6edf3peer-clickTff7b72=Ta5d6ff"Te6edf3onPeerClickTa5d6ff"
Tb4b4b4@Te6edf3conversation-search-changedTff7b72=Ta5d6ff"Te6edf3onConversationSearchChangedTa5d6ff"
Tb4b4b4@Te6edf3conversation-filter-changedTff7b72=Ta5d6ff"Te6edf3onConversationFilterChangedTa5d6ff"
Tb4b4b4/Tb4b4b4>

Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex-col flex-1 overflow-hidden min-w-0 bg-gradient-to-br from-white via-slate-50 to-slate-100 dark:from-zinc-950 dark:via-zinc-900 dark:to-zinc-900/80"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3destinationHash Tff7b72? Ta5d6ff'flex' Tff7b72: Ta5d6ff'hidden sm:flex'Ta5d6ff"
Tb4b4b4>
T8b949e<!-- messages tab -->
Tb4b4b4<Tff7b72ConversationViewer
Te6edf3refTff7b72=Ta5d6ff"conversation-viewer"
Tb4b4b4:Te6edf3my-lxmf-address-hashTff7b72=Ta5d6ff"Te6edf3configTff7b72?Tb4b4b4.Te6edf3lxmf_address_hashTa5d6ff"
Tb4b4b4:Te6edf3selected-peerTff7b72=Ta5d6ff"Te6edf3selectedPeerTa5d6ff"
Tb4b4b4:Te6edf3conversationsTff7b72=Ta5d6ff"Te6edf3conversationsTa5d6ff"
Tb4b4b4@Te6edf3closeTff7b72=Ta5d6ff"Te6edf3onCloseConversationViewerTa5d6ff"
Tb4b4b4@Te6edf3reload-conversationsTff7b72=Ta5d6ff"Te6edf3getConversationsTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>

Tb4b4b4<Tff7b72scriptTb4b4b4>
Tff7b72import Te6edf3WebSocketConnection Tff7b72from Ta5d6ff"../../js/WebSocketConnection"Tb4b4b4;
Tff7b72import Te6edf3MessagesSidebar Tff7b72from Ta5d6ff"./MessagesSidebar.vue"Tb4b4b4;
Tff7b72import Te6edf3ConversationViewer Tff7b72from Ta5d6ff"./ConversationViewer.vue"Tb4b4b4;
Tff7b72import Te6edf3GlobalState Tff7b72from Ta5d6ff"../../js/GlobalState"Tb4b4b4;
Tff7b72import Te6edf3DialogUtils Tff7b72from Ta5d6ff"../../js/DialogUtils"Tb4b4b4;
Tff7b72import Te6edf3GlobalEmitter Tff7b72from Ta5d6ff"../../js/GlobalEmitter"Tb4b4b4;

Tff7b72export Tff7b72default Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"MessagesPage"Tb4b4b4,
Te6edf3componentsTff7b72: Tb4b4b4{
Te6edf3ConversationViewerTb4b4b4,
Te6edf3MessagesSidebarTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3propsTff7b72: Tb4b4b4{
Te6edf3destinationHashTff7b72: Tb4b4b4{
Te6edf3typeTff7b72: Tffa657StringTb4b4b4,
Te6edf3requiredTff7b72: Tff7b72falseTb4b4b4,
Tff7b72defaultTff7b72: Tff7b72nullTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3dataTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3reloadIntervalTff7b72: Tff7b72nullTb4b4b4,
Te6edf3conversationRefreshTimeoutTff7b72: Tff7b72nullTb4b4b4,

Te6edf3configTff7b72: Tff7b72nullTb4b4b4,
Te6edf3peersTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3selectedPeerTff7b72: Tff7b72nullTb4b4b4,

Te6edf3conversationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3lxmfDeliveryAnnouncesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,

Te6edf3conversationSearchTermTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3filterUnreadOnlyTff7b72: Tff7b72falseTb4b4b4,
Te6edf3filterFailedOnlyTff7b72: Tff7b72falseTb4b4b4,
Te6edf3filterHasAttachmentsOnlyTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isLoadingConversationsTff7b72: Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3computedTff7b72: Tb4b4b4{
Te6edf3popoutRouteTypeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$routeTff7b72?Tb4b4b4.Te6edf3metaTff7b72?Tb4b4b4.Te6edf3popoutTypeTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3$routeTb4b4b4.Te6edf3metaTb4b4b4.Te6edf3popoutTypeTb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3$routeTff7b72?Tb4b4b4.Te6edf3queryTff7b72?Tb4b4b4.Te6edf3popout Tff7b72?? Tff7b72thisTb4b4b4.Te6edf3getHashPopoutValueTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3isPopoutModeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3popoutRouteType Tff7b72=== Ta5d6ff"conversation"Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3watchTff7b72: Tb4b4b4{
Te6edf3conversationsTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// update global state
Te6edf3GlobalStateTb4b4b4.Te6edf3unreadConversationsCount Tff7b72= Tff7b72thisTb4b4b4.Te6edf3conversationsTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3conversationTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72return Te6edf3conversationTb4b4b4.Te6edf3is_unreadTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4.Te6edf3lengthTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3destinationHashTb4b4b4(Te6edf3newHashTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3newHashTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3onComposeNewMessageTb4b4b4(Te6edf3newHashTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3beforeUnmountTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3reloadIntervalTb4b4b4)Tb4b4b4;
Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3conversationRefreshTimeoutTb4b4b4)Tb4b4b4;

T8b949e// stop listening for websocket messages
Te6edf3WebSocketConnectionTb4b4b4.Te6edf3offTb4b4b4(Ta5d6ff"message"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3onWebsocketMessageTb4b4b4)Tb4b4b4;
Te6edf3GlobalEmitterTb4b4b4.Te6edf3offTb4b4b4(Ta5d6ff"compose-new-message"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3onComposeNewMessageTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3mountedTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// listen for websocket messages
Te6edf3WebSocketConnectionTb4b4b4.Te6edf3onTb4b4b4(Ta5d6ff"message"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3onWebsocketMessageTb4b4b4)Tb4b4b4;
Te6edf3GlobalEmitterTb4b4b4.Te6edf3onTb4b4b4(Ta5d6ff"compose-new-message"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3onComposeNewMessageTb4b4b4)Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3getConfigTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getConversationsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3getLxmfDeliveryAnnouncesTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// update info every few seconds
Tff7b72thisTb4b4b4.Te6edf3reloadInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getConversationsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff5000Tb4b4b4)Tb4b4b4;

T8b949e// compose message if a destination hash was provided on page load
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3destinationHashTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3onComposeNewMessageTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3destinationHashTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3methodsTff7b72: Tb4b4b4{
Tff7b72async Te6edf3onComposeNewMessageTb4b4b4(Te6edf3destinationHashTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3destinationHash Tff7b72== Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3selectedPeerTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3composeInput Tff7b72= Tffa657documentTb4b4b4.Te6edf3getElementByIdTb4b4b4(Ta5d6ff"compose-input"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3composeInputTb4b4b4) Tb4b4b4{
Te6edf3composeInputTb4b4b4.Te6edf3focusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3destinationHashTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"lxmf@"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3destinationHash Tff7b72= Te6edf3destinationHashTb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff"lxmf@"Tb4b4b4, Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getLxmfDeliveryAnnounceTb4b4b4(Te6edf3destinationHashTb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3existingPeer Tff7b72= Tff7b72thisTb4b4b4.Te6edf3peersTb4b4b4[Te6edf3destinationHashTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3existingPeerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3onPeerClickTb4b4b4(Te6edf3existingPeerTb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3destinationHashTb4b4b4.Te6edf3length Tff7b72!== T79c0ff32Tb4b4b4) Tb4b4b4{
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Ta5d6ff"Invalid Address"Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tff7b72thisTb4b4b4.Te6edf3onPeerClickTb4b4b4(Tb4b4b4{
Te6edf3display_nameTff7b72: Ta5d6ff"Unknown Peer"Tb4b4b4,
Te6edf3destination_hashTff7b72: Te6edf3destinationHashTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getConfigTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/configTa5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3config Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3configTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
T8b949e// do nothing if failed to load config
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3onWebsocketMessageTb4b4b4(Te6edf3messageTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3json Tff7b72= Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3messageTb4b4b4.Te6edf3dataTb4b4b4)Tb4b4b4;
Tff7b72switch Tb4b4b4(Te6edf3jsonTb4b4b4.Te6edf3typeTb4b4b4) Tb4b4b4{
Tff7b72case Ta5d6ff"config"Tff7b72: Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3config Tff7b72= Te6edf3jsonTb4b4b4.Te6edf3configTb4b4b4;
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tff7b72case Ta5d6ff"announce"Tff7b72: Tb4b4b4{
Tff7b72const Te6edf3aspect Tff7b72= Te6edf3jsonTb4b4b4.Te6edf3announceTb4b4b4.Te6edf3aspectTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3aspect Tff7b72=== Ta5d6ff"lxmf.delivery"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3updatePeerFromAnnounceTb4b4b4(Te6edf3jsonTb4b4b4.Te6edf3announceTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tff7b72case Ta5d6ff"lxmf.delivery"Tff7b72: Tb4b4b4{
T8b949e// reload conversations when a new message is received
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3getConversationsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getLxmfDeliveryAnnouncesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
T8b949e// fetch announces for "lxmf.delivery" aspect
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/announcesTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3paramsTff7b72: Tb4b4b4{
Te6edf3aspectTff7b72: Ta5d6ff"lxmf.delivery"Tb4b4b4,
Te6edf3limitTff7b72: T79c0ff500Tb4b4b4, T8b949e// limit ui to showing 500 latest announces
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

T8b949e// update ui
Tff7b72const Te6edf3lxmfDeliveryAnnounces Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3announcesTb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3lxmfDeliveryAnnounce Tff7b72of Te6edf3lxmfDeliveryAnnouncesTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3updatePeerFromAnnounceTb4b4b4(Te6edf3lxmfDeliveryAnnounceTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
T8b949e// do nothing if failed to load announces
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getLxmfDeliveryAnnounceTb4b4b4(Te6edf3destinationHashTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
T8b949e// fetch announce for destination hash
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/announcesTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3paramsTff7b72: Tb4b4b4{
Te6edf3destination_hashTff7b72: Te6edf3destinationHashTb4b4b4,
Te6edf3limitTff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

T8b949e// update ui
Tff7b72const Te6edf3lxmfDeliveryAnnounces Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3announcesTb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3lxmfDeliveryAnnounce Tff7b72of Te6edf3lxmfDeliveryAnnouncesTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3updatePeerFromAnnounceTb4b4b4(Te6edf3lxmfDeliveryAnnounceTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
T8b949e// do nothing if failed to load announce
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3getConversationsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isLoadingConversations Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/lxmf/conversationsTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3paramsTff7b72: Tff7b72thisTb4b4b4.Te6edf3buildConversationQueryParamsTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3conversations Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3conversationsTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
T8b949e// do nothing if failed to load conversations
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isLoadingConversations Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3buildConversationQueryParamsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3params Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3conversationSearchTerm Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3conversationSearchTermTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4) Tff7b72!== Ta5d6ff""Tb4b4b4) Tb4b4b4{
Te6edf3paramsTb4b4b4.Te6edf3search Tff7b72= Tff7b72thisTb4b4b4.Te6edf3conversationSearchTermTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3filterUnreadOnlyTb4b4b4) Tb4b4b4{
Te6edf3paramsTb4b4b4.Te6edf3filter_unread Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3filterFailedOnlyTb4b4b4) Tb4b4b4{
Te6edf3paramsTb4b4b4.Te6edf3filter_failed Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3filterHasAttachmentsOnlyTb4b4b4) Tb4b4b4{
Te6edf3paramsTb4b4b4.Te6edf3filter_has_attachments Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3paramsTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3updatePeerFromAnnounceTff7b72: Tff7b72function Tb4b4b4(Te6edf3announceTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3peersTb4b4b4[Te6edf3announceTb4b4b4.Te6edf3destination_hashTb4b4b4] Tff7b72= Te6edf3announceTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onPeerClickTff7b72: Tff7b72function Tb4b4b4(Te6edf3peerTb4b4b4) Tb4b4b4{
T8b949e// update selected peer
Tff7b72thisTb4b4b4.Te6edf3selectedPeer Tff7b72= Te6edf3peerTb4b4b4;

T8b949e// update current route
Tff7b72const Te6edf3routeName Tff7b72= Tff7b72thisTb4b4b4.Te6edf3isPopoutMode Tff7b72? Ta5d6ff"messages-popout" Tff7b72: Ta5d6ff"messages"Tb4b4b4;
Tff7b72const Te6edf3routeOptions Tff7b72= Tb4b4b4{
Te6edf3nameTff7b72: Te6edf3routeNameTb4b4b4,
Te6edf3paramsTff7b72: Tb4b4b4{
Te6edf3destinationHashTff7b72: Te6edf3peerTb4b4b4.Te6edf3destination_hashTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isPopoutMode Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3$routeTff7b72?Tb4b4b4.Te6edf3queryTb4b4b4) Tb4b4b4{
Te6edf3routeOptionsTb4b4b4.Te6edf3query Tff7b72= Tb4b4b4{ Tb4b4b4...Tff7b72thisTb4b4b4.Te6edf3$routeTb4b4b4.Te6edf3query Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3$routerTb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3routeOptionsTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onConversationClickTff7b72: Tff7b72function Tb4b4b4(Te6edf3conversationTb4b4b4) Tb4b4b4{
T8b949e// object must stay compatible with format of peers
Tff7b72thisTb4b4b4.Te6edf3onPeerClickTb4b4b4(Te6edf3conversationTb4b4b4)Tb4b4b4;

T8b949e// mark conversation as read
Tff7b72thisTb4b4b4.Te6edf3$refsTb4b4b4[Ta5d6ff"conversation-viewer"Tb4b4b4]Tb4b4b4.Te6edf3markConversationAsReadTb4b4b4(Te6edf3conversationTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onCloseConversationViewerTff7b72: Tff7b72function Tb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// clear selected peer
Tff7b72thisTb4b4b4.Te6edf3selectedPeer Tff7b72= Tff7b72nullTb4b4b4;

Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isPopoutModeTb4b4b4) Tb4b4b4{
Tffa657windowTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}

T8b949e// update current route
Tff7b72const Te6edf3routeName Tff7b72= Tff7b72thisTb4b4b4.Te6edf3isPopoutMode Tff7b72? Ta5d6ff"messages-popout" Tff7b72: Ta5d6ff"messages"Tb4b4b4;
Tff7b72const Te6edf3routeOptions Tff7b72= Tb4b4b4{ Te6edf3nameTff7b72: Te6edf3routeName Tb4b4b4}Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isPopoutMode Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3$routeTff7b72?Tb4b4b4.Te6edf3queryTb4b4b4) Tb4b4b4{
Te6edf3routeOptionsTb4b4b4.Te6edf3query Tff7b72= Tb4b4b4{ Tb4b4b4...Tff7b72thisTb4b4b4.Te6edf3$routeTb4b4b4.Te6edf3query Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3$routerTb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3routeOptionsTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3requestConversationsRefreshTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3conversationRefreshTimeoutTb4b4b4) Tb4b4b4{
Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3conversationRefreshTimeoutTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3conversationRefreshTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3getConversationsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff250Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onConversationSearchChangedTb4b4b4(Te6edf3termTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3conversationSearchTerm Tff7b72= Te6edf3termTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3requestConversationsRefreshTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onConversationFilterChangedTb4b4b4(Te6edf3filterKeyTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3filterKey Tff7b72=== Ta5d6ff"unread"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3filterUnreadOnly Tff7b72= Tff7b72!Tff7b72thisTb4b4b4.Te6edf3filterUnreadOnlyTb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3filterKey Tff7b72=== Ta5d6ff"failed"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3filterFailedOnly Tff7b72= Tff7b72!Tff7b72thisTb4b4b4.Te6edf3filterFailedOnlyTb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3filterKey Tff7b72=== Ta5d6ff"attachments"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3filterHasAttachmentsOnly Tff7b72= Tff7b72!Tff7b72thisTb4b4b4.Te6edf3filterHasAttachmentsOnlyTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3requestConversationsRefreshTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3getHashPopoutValueTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3hash Tff7b72= Tffa657windowTb4b4b4.Te6edf3locationTb4b4b4.Te6edf3hash Tff7b72|| Ta5d6ff""Tb4b4b4;
Tff7b72const Te6edf3match Tff7b72= Te6edf3hashTb4b4b4.Te6edf3matchTb4b4b4(Ta5d6ff/popout=([^&]+)/Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3match Tff7b72? Tffa657decodeURIComponentTb4b4b4(Te6edf3matchTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4) Tff7b72: Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────